/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.uoc.tds.pec4.server.bbdd;

import edu.uoc.tds.pec4.i18n.GestorIdiomas;
import edu.uoc.tds.pec4.model.Estado;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JOptionPane;

import edu.uoc.tds.pec4.common.RemotoInterface;

/**
 *
 * @author Fernando
 */
public class GestorEstado {
    RemotoInterface remoto;

    public GestorEstado(RemotoInterface remoto){
        this.remoto = remoto;
    }

    /**
     * MÃ©todo para obtener una lista de instancias de Prueba
     * {pre: es un mÃ©todo tÃ­pico de retorno}
     * {post: una lista de instancias de Resultados}
     */
    public List<Estado> getListaEstados(){
	//Establecemos la sentencia para obtener una lista de resultados
        List<Estado> lista = new ArrayList<Estado>();

	String sqlString = null;
	sqlString = "SELECT * FROM Estado ORDER BY id_estado_prueba;";

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//Capturaremos la excepcion en caso de error
        try{            
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            resultSet = preparedStatement.executeQuery();
            
            //Si la consulta devuelve un dato generaremos la instancia correspondiente que devolvera el mÃ©todo
            while(resultSet.next()){
                Estado estado = new Estado();
                
                estado.setId_estado_prueba(resultSet.getInt("id_estado_prueba"));
		estado.setDescripcion_estado_prueba(resultSet.getString("descripcion_estado"));

                lista.add(estado);
            }

            //Si la lista esta vacia lanzaremos nuestra propia excepcion
            /*
            if(lista.isEmpty())
                throw new ListaVaciaException();
             *
             */
        }

        /** Capturamos el error en el caso en que la lista generada este vacÃ­a */
        /*
        catch(ListaVaciaException exc){
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.listaVacia.text"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }
        */
        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.gestorbbdd.bbdd"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }

        /** Capturamos excepciÃ³n de carÃ¡cter general*/
        catch (Exception exc) {
            JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.general"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }

        /** En todo caso ejecutamos el siguiente cÃ³digo*/
        finally {
            try {
		resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepciÃ³n de carÃ¡cter general*/
            catch (Exception exc) {
                JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.general"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            }
        }

        return lista;
    }

    /**
     * MÃ©todo para obtener una lista de instancias de Prueba
     * {pre: es un mÃ©todo tÃ­pico de retorno}
     * {post: una lista de instancias de Resultados}
     */
    public Estado getEstado(int id_estado_prueba){
        Estado estado = new Estado();

        //Establecemos la sentencia para obtener una lista de resultados
	String sqlString = null;
	sqlString = "SELECT * FROM Estado WHERE id_estado_prueba = ?;";

        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;

	//Capturaremos la excepcion en caso de error
        try{
            preparedStatement = this.remoto.getConexion().prepareStatement(sqlString);
            preparedStatement.setInt(1, id_estado_prueba);

            resultSet = preparedStatement.executeQuery();

            //Si la consulta devuelve un dato generaremos la instancia correspondiente que devolvera el mÃ©todo
            if(resultSet.next()){
                estado.setId_estado_prueba(resultSet.getInt("id_estado_prueba"));
		estado.setDescripcion_estado_prueba(resultSet.getString("descripcion_estado_prueba"));
            }

            //Si la lista esta vacia lanzaremos nuestra propia excepcion
            /*
            if(lista.isEmpty())
                throw new ListaVaciaException();
             *
             */
        }

        /** Capturamos el error en el caso en que la lista generada este vacÃ­a */
        /*
        catch(ListaVaciaException exc){
            JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.listaVacia.text"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }
        */
        /** Capturamos el error en el acceso a la BBDD */
        catch (SQLException exc) {
            JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.gestorbbdd.bbdd"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }

        /** Capturamos excepciÃ³n de carÃ¡cter general*/
        catch (Exception exc) {
            JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.general"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
        }

        /** En todo caso ejecutamos el siguiente cÃ³digo*/
        finally {
            try {
		resultSet.close();
                preparedStatement.close();
            }

            /** Capturamos excepción de carácter general*/
            catch (Exception exc) {
                JOptionPane.showMessageDialog(null, exc.getMessage(), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
                //JOptionPane.showMessageDialog(null, GestorIdiomas.getMessage("error.general"), GestorIdiomas.getMessage("error"), JOptionPane.ERROR_MESSAGE);
            }
        }

        return estado;
    }
}
